package com.tank.game.api;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.function.Consumer;

/**
 * 画板
 *
 * @author Zed
 */
public interface Panel {

    /**
     * 获取尺寸
     *
     * @return {@link Dimension}
     */
    Dimension getDimension();

    /**
     * 获取当前面板的图像流
     *
     * @return {@link BufferedImage}
     */
    BufferedImage getCurrentBufferedImage();

    /**
     * 展示的对象：不能超过画板的高度和宽度
     * 如果画板上已经存在的 {@link ShowObject}先要销毁，注意要设置为空交给JVM垃圾回收期处理
     */
    void draw(ShowObject showObject);

    /**
     * 展示的对象：不能超过画板的高度和宽度
     * 如果画板上已经存在的 {@link ShowObject}先要销毁，注意要设置为空交给JVM垃圾回收期处理
     *
     * @param {@link ShowObject}
     * @param {@link Consumer<Graphics>}
     */
    void draw(ShowObject showObject, Consumer<Graphics> consumer);

    /**
     * 展示的对象接口
     */
    interface ShowObject<S extends Shape> {

        /**
         * 宽
         *
         * @return {@link Integer}
         */
        int getWidth();

        /**
         * 高
         *
         * @return {@link Integer}
         */
        int getHeight();

        /**
         * 展示在画板的位置
         *
         * @return {@link Position}
         */
        Position getPosition();

        /**
         * 展示的对象
         */
        <S extends Shape> S getObject();

    }

}
